QuickSightのデータソースでAthenaを使った際のエラーを解決してみた
データアナリティクス事業本部 機械学習チームの鈴木です。
以下のドキュメントを参考に、新規Athenaデータセットを作成したところエラーが発生したので、解消方法について調べてみました。
発生したエラー
この記事では、以下の2種のエラーが出た際の解決例を記載しました。
- An error has been thrown from the AWS Athena client. No output location provided.
- Permission denied on S3 path: Glueテーブルで参照しているS3バケット名
1点目は、新規Athenaデータソースを作成する際に接続を検証すると、データベースでSQL例外が生成されました。
と表示され、詳細を表示するとAn error has been thrown from the AWS Athena client. No output location provided.
と記載されている場合です。
2点目は、Athenaデータソースを使って可視化をする際に、データベースでSQL例外が生成されました
と表示され、Athenaの実行結果を見るとPermission denied on S3 path: Glueテーブルで参照しているS3バケット名
のようなエラーが記載されている場合です。
前提
今回は以下の条件を前提とします。
- QuickSightはエンタープライズ版です。
- IAMロールはQuickSightで管理されるロールを使っているとします。
QuickSightのAWSのサービスへのアクセス
では、Redshift・RDS・IAM・Athenaが許可されているものとします。
セキュリティとアクセス権限
画面で見ると以下のようになっています。
各エラーに対する対応
No output location providedのエラー
データセットで使用するAthenaのワークグループにクエリの結果の場所
が設定されていないためでした。
以下のドキュメントに、Athenaワークグループにクエリ結果の場所の設定が必要なことが記載されています。
まず、Athenaデータソースで指定したワークグループの設定をAthenaのコンソールから確認すると、以下のようにクエリの結果の場所
が未設定でした。
データセットに設定するAthena workgroupをAthenaの画面から編集し、クエリの結果の場所
を設定しました。
このときのポイントは、後で説明する、QuickSightが使うIAMロールにて許可されるS3バケットを、クエリの結果の場所に選択することです。バケット名がaws-athena-query-results-
のプレフィックスで始まるバケットを指定する場合は、IAMロールへのAthenaへのアクセス権付与だけすればアクセスできるようになるので設定が楽でした。これについては後述します。
S3へのアクセス権限のエラー
QuickSightが使うaws-quicksight-service-role-v0
ロールに、S3へのアクセス権限が不足していたためでした。
※このロールについては参考資料へのリンクを補足に記載します。
このトラブル解決については、以下のドキュメントにも例が記載されているので併せてご覧ください。
今回は以下の2つのアクセス許可をQuickSightが使うIAMロールに管理画面から設定しました。
- 検索したGlueテーブルが参照するS3へのアクセス権限
- Athenaのクエリの結果のS3への書き込み権限
なお、2点目については、今回はaws-athena-query-results-
のプレフィックスで始まるバケットに結果を入れるよう、事前にワークグループの設定をしてあります。
検索したGlueテーブルが参照するS3へのアクセス権限の設定
まず画面右上のアイコンから、QuickSightの管理画面に行きます。
セキュリティとアクセス権限
からQuickSightのAWSのサービスへのアクセス
より管理
ボタンを押します。
Amazon S3へのアクセスを選択し、読み取りをするバケットにチェックを入れて完了とします。
Athenaのクエリの結果のS3への書き込み権限
こちらについては、Athenaへのアクセスをもともと許可しており、その中でaws-athena-query-results-
のプレフィックスで始まるバケットへの書き込みは許可されているようでした。
試しにaws-quicksight-service-role-v0
ロールを確認すると、AWSQuicksightAthenaAccess
ポリシーで許可されていることが確認できました。クエリ結果の書き込みでエラーが発生する場合は、このロールの状態を確認するとよさそうです。
補足
aws-quicksight-service-role-v0の参考資料
QuickSightがAWSリソースにアクセスするための専用ロールです。このロールの編集はQuickSight管理画面から行われます。
以下の資料を見ると理解が深まりましたのでご紹介します。
- QuickSightユーザーガイドのAmazon QuickSight で Athena を使用する時の許可が不足している - Amazon QuickSightページ
- Amazon Web Services ブログの【開催報告&資料公開】Amazon QuickSight のノウハウ総まとめ! 〜BI設計から運用まで〜 | Amazon Web Services ブログにリンクが記載されているQuickSightアカウント/ユーザー管理におけるポイントの資料
最後に
今回は新規Athenaデータセット作成時に発生したエラー例とその解消した方法についてご紹介しました。参考になりましたら幸いです。